package gen;

// Ce package contient les elements de base
import ui.*;
import javax.microedition.midlet.*;

// Ce package contient les elements permettant de gerer l'interface graphique
import javax.microedition.lcdui.*;

// Pour etre executable, la classe doit heriter de MIDlet 
public class Controleur extends MIDlet implements CommandListener, ItemCommandListener
{
	private Display display;
	private EcranDemarrage ecranDemarrage;
        private EcranListeRagots listeRagots;
        private EcranAffichageMessage affichageMessage;
        private static BaseRagot baseRag;
	private EcrireRagot ecrireRagot;
    //    private ClientBT clientBt;
        //private ServeurBT serveurBt;

	//Constructeur	
	public Controleur()
        {
            //Initialisation
            // fait un lien avec l'affichage

            baseRag = new BaseRagot();
            this.baseRag.loadPersistentRagot();
            this.display = Display.getDisplay(this);
            //this.modele = new Modele();

            // EcranDemarrage
            this.ecranDemarrage = new EcranDemarrage(this);
            this.listeRagots = new EcranListeRagots(this);
            this.affichageMessage = new EcranAffichageMessage(this);
            
            this.ecrireRagot = new EcrireRagot(this);
            //BlueTooth
           // this.clientBt = new ClientBT();
           // this.serveurBt = new ServeurBT();
        }

    // Evenement execute au demarrage de l'application
    public void startApp() {
      // affichage du formulaire
      display.setCurrent(this.ecranDemarrage.getScreen());
      //this.clientBt.start();
     // this.serveurBt.start();

    }

    public static BaseRagot getBaseRag()
    {
        return baseRag;
    }

  // Evenement execute lors de la mise en pause de l'application
  public void pauseApp() {
  }
 
  // Evenement execute lorsque l'application se termine
  public void destroyApp(boolean unconditional) {
  }
    public void commandAction(Command c, Displayable s)
    {
        // lors du clic sur le bouton Exit
        if ((c == ecranDemarrage.getCommandExit()) || (c == listeRagots.getCommandExit()) || (c == affichageMessage.getCommandExit()))
        {
            // appel manuel a  la fonction de fermeture
            destroyApp(false);
            // on demande au manager de fermer l'application
            notifyDestroyed();
        }
        else if (c == ecranDemarrage.getEcrireNouveau())
        {
            this.ecrireRagot = new EcrireRagot(this);
            display.setCurrent(this.ecrireRagot.getScreen());
        }
        else if(c == ecranDemarrage.getConsulter())
        {
            //IMPLICIT= selection unique avec commande associee
            //this.listeRagots.append(null, null);
            this.rafraichirListeRagots(this.listeRagots.getScreen());
            display.setCurrent(this.listeRagots.getScreen());
        }
        else if(c == ecranDemarrage.getRafraichir())
        {}

        else if (c == ecrireRagot.getCommandRagoter())
        {
            this.baseRag.nouveauPersistentRagot(this.ecrireRagot.getTextTitre(), this.ecrireRagot.getTextRagot(), this.ecrireRagot.getTextAuteur());
            //this.baseRag.LoadPersistentRagot();
            //this.baseRag.NouveauRagot(this.ecrireRagot.getTextTitre(), this.ecrireRagot.getTextRagot(), this.ecrireRagot.getTextAuteur());
            this.ecranDemarrage.refreshDemarrage(this);
            display.setCurrent(this.ecranDemarrage.getScreen());
        }
        else if (c == ecrireRagot.getCommandRetour())
        {
            this.ecranDemarrage.refreshDemarrage(this);
            display.setCurrent(this.ecranDemarrage.getScreen());
        }

        else if(c == listeRagots.getCommandBack())
        {
            this.ecranDemarrage.refreshDemarrage(this);
            display.setCurrent(this.ecranDemarrage.getScreen());
        }
        else if(c == affichageMessage.getCommandBack())
        {
            display.setCurrent(this.listeRagots.getScreen());
        }
        else if(c == listeRagots.getCommandAfficher())
        {
           // affichageMessage.afficherMessage("teste");
            affichageMessage.afficherMessage(listeRagots.getMessage());
            display.setCurrent(this.affichageMessage.getScreen());
        }
    }
    
    public void commandAction(Command c, Item i)
    {
        

      
        /*        else if(c == ecranDemarrage.ecrireNouveau)
        else if(c == ecranDemarrage.rafraichir)
        else return;
        */
        //    ecranDemarrage.assistant.setText("Nao !") ;
    }

    public void afficherRagots()
    {
        //this.display.setCurrent(this.list1);
    }

    public void rafraichirListeRagots(List listeRagots)
    {
     
         int num = 0;//pour les compter

         listeRagots.deleteAll();


         java.util.Enumeration Renum = this.baseRag.getEnumerationRagots();
         Ragot []r = new Ragot[this.baseRag.sizeRagot()];

         //on recup tous les ragots
         while (Renum.hasMoreElements())
         {
             r[num++] = (Ragot)Renum.nextElement();

            // listeRagots.append(String.valueOf(num)+": "+r[num].getTitre()+" par "+r[num].getAuteur()+"\n"+r[num].getDate()+"\n"+r[num].getMessage(), null);
     
         }

   
             int compteur=num;
             int good=0;
             //on classe par date
             for(int b=0; b<num;b++)
             {
                 long bestdate=0;
                 for(int a=0;a<num;a++)
                 {
                     if(r[a]!=null)
                     {
                         if(bestdate<r[a].getLongDate())
                         {
                             bestdate=r[a].getLongDate();
                             good=a;


                         }
                     }
                 }
                 //ici good contient la date la plus haute
                 //donc on ajoute le ragot a la liste et on le detruit dans notre tab
                  listeRagots.append(String.valueOf(compteur--)+": "+r[good].getTitre()+" par "+r[good].getAuteur()+"\n"+r[good].getDate()+"\n"+r[good].getMessage(), null);
                  r[good]=null;
             }
         
    }
}